#pragma once

#include "Game/Process/RenderProcess.h"
#include "Render/Texture/Picture2DTexture.h"
#include "Render/Texture/RenderTarget.h"
#include "Render/Tradition/RHIRenderPass.h"
#include "Render/Tradition/GraphicsPipeline.h"
#include "Render/Texture/ColorRenderTarget.h"
#include "Render/Texture/CubemapTexture.h"
#include "Render/Texture/DepthRenderTarget.h"
#include "Render/Shader/RHIDescriptor.h"
#include "Render/Tradition/RHIFramebuffer.h"
#include "LocalEntity.h"


class MrtProcess : public RenderProcess
{
	DECLARE_PROCESS(MrtProcess)

	struct Ubo
	{
		glm::mat4 proj;
		glm::mat4 view;
		glm::mat4 model;
	};

	struct UboSkybox
	{
		glm::mat4 proj;
		glm::mat4 model;
	};


protected:

	virtual void OnInit() override;

	virtual void OnTick(float deltaTime) override;

	virtual void OnResize() override;

protected:

	std::vector<LocalEntity*> mModelEntitys;




	RefCountPtr<VertexBuffer> mSkyboxVertexBuffer;

	RefCountPtr<IndexBuffer> mSkyboxIndexBuffer;

	RefCountPtr<RHIBuffer> mSkyboxUboBuffer;

	RefCountPtr<RHISampler> mSkyboxSampler;

	RefCountPtr<RHITexture> mSkyboxTexture;

	DescriptorMask mSkyboxDescriptorMask;

	RefCountPtr<RHIDescriptor> mSkyboxDescriptor;

	RefCountPtr<GraphicsPipeline> mSkyboxPipeline;



	

	RefCountPtr<RHIDescriptor> mDescriptor;

	RefCountPtr<GraphicsPipeline> mPipeline;

	RefCountPtr<RHIRenderPass> mRenderPass;

	RefCountPtr<RHIFrameBuffer> mFrameBuffer;

	RefCountPtr<ColorRenderTarget> PositionRenderTarget;

	RefCountPtr<ColorRenderTarget> NormalRenderTarget;

	RefCountPtr<ColorRenderTarget> AlbedoRenderTarget;

	RefCountPtr<DepthRenderTarget> mDepthRenderTarget;

	RefCountPtr<RHICommandBuffer> mCommandBuffer;

	RefCountPtr<RHISemaphore> mWaitGraphicsSemaphore;

	RefCountPtr<RHISemaphore> mSignalOfflineSemaphore;
};
